{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 智能2011《AI导论》课堂Demo_3：卷积神经网络CNN\n",
    "- MNIST数据集是机器学习领域中非常经典的一个数据集\n",
    "- 训练数据：60000个样本，28 * 28 灰度图片\n",
    "- 测试数据：10000个样本，28 * 28 灰度图片\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1. 数据加载和标准化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 引入工具包\n",
    "%matplotlib inline  \n",
    "import numpy as np\n",
    "from matplotlib import pyplot as plt\n",
    "\n",
    "from tensorflow.keras.datasets import mnist  # MNIST手写体数据集\n",
    "from tensorflow.keras import Sequential   # 顺序模型\n",
    "from tensorflow.keras.layers import Flatten,Dense,Conv2D,MaxPooling2D  # 全连接层，2D卷积层"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 以下开始正文"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(60000, 28, 28) (60000,) (10000, 28, 28) (10000,)\n"
     ]
    }
   ],
   "source": [
    "# 读取mnist数据集\n",
    "(x_train, y_train),(x_test, y_test) = mnist.load_data()  # 数据加载\n",
    "\n",
    "print(x_train.shape, y_train.shape, x_test.shape, y_test.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(28, 28)"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 数据需要标准化到（0，1）范围，直接/255\n",
    "x_train, x_test = x_train / 255.0, x_test / 255.0  \n",
    "x_train[0].shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        ],\n",
       "       [0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        ],\n",
       "       [0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        ],\n",
       "       [0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        ],\n",
       "       [0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        ],\n",
       "       [0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.01176471, 0.07058824, 0.07058824,\n",
       "        0.07058824, 0.49411765, 0.53333333, 0.68627451, 0.10196078,\n",
       "        0.65098039, 1.        , 0.96862745, 0.49803922, 0.        ,\n",
       "        0.        , 0.        , 0.        ],\n",
       "       [0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.11764706, 0.14117647,\n",
       "        0.36862745, 0.60392157, 0.66666667, 0.99215686, 0.99215686,\n",
       "        0.99215686, 0.99215686, 0.99215686, 0.88235294, 0.6745098 ,\n",
       "        0.99215686, 0.94901961, 0.76470588, 0.25098039, 0.        ,\n",
       "        0.        , 0.        , 0.        ],\n",
       "       [0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.19215686, 0.93333333, 0.99215686,\n",
       "        0.99215686, 0.99215686, 0.99215686, 0.99215686, 0.99215686,\n",
       "        0.99215686, 0.99215686, 0.98431373, 0.36470588, 0.32156863,\n",
       "        0.32156863, 0.21960784, 0.15294118, 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        ],\n",
       "       [0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.07058824, 0.85882353, 0.99215686,\n",
       "        0.99215686, 0.99215686, 0.99215686, 0.99215686, 0.77647059,\n",
       "        0.71372549, 0.96862745, 0.94509804, 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        ],\n",
       "       [0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.31372549, 0.61176471,\n",
       "        0.41960784, 0.99215686, 0.99215686, 0.80392157, 0.04313725,\n",
       "        0.        , 0.16862745, 0.60392157, 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        ],\n",
       "       [0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.05490196,\n",
       "        0.00392157, 0.60392157, 0.99215686, 0.35294118, 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        ],\n",
       "       [0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.54509804, 0.99215686, 0.74509804, 0.00784314,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        ],\n",
       "       [0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.04313725, 0.74509804, 0.99215686, 0.2745098 ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        ],\n",
       "       [0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.1372549 , 0.94509804, 0.88235294,\n",
       "        0.62745098, 0.42352941, 0.00392157, 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        ],\n",
       "       [0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.31764706, 0.94117647,\n",
       "        0.99215686, 0.99215686, 0.46666667, 0.09803922, 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        ],\n",
       "       [0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.17647059,\n",
       "        0.72941176, 0.99215686, 0.99215686, 0.58823529, 0.10588235,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        ],\n",
       "       [0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.0627451 , 0.36470588, 0.98823529, 0.99215686, 0.73333333,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        ],\n",
       "       [0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.97647059, 0.99215686, 0.97647059,\n",
       "        0.25098039, 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        ],\n",
       "       [0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.18039216,\n",
       "        0.50980392, 0.71764706, 0.99215686, 0.99215686, 0.81176471,\n",
       "        0.00784314, 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        ],\n",
       "       [0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.15294118, 0.58039216, 0.89803922,\n",
       "        0.99215686, 0.99215686, 0.99215686, 0.98039216, 0.71372549,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        ],\n",
       "       [0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.09411765, 0.44705882, 0.86666667, 0.99215686, 0.99215686,\n",
       "        0.99215686, 0.99215686, 0.78823529, 0.30588235, 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        ],\n",
       "       [0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.09019608, 0.25882353,\n",
       "        0.83529412, 0.99215686, 0.99215686, 0.99215686, 0.99215686,\n",
       "        0.77647059, 0.31764706, 0.00784314, 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        ],\n",
       "       [0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.07058824, 0.67058824, 0.85882353, 0.99215686,\n",
       "        0.99215686, 0.99215686, 0.99215686, 0.76470588, 0.31372549,\n",
       "        0.03529412, 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        ],\n",
       "       [0.        , 0.        , 0.        , 0.        , 0.21568627,\n",
       "        0.6745098 , 0.88627451, 0.99215686, 0.99215686, 0.99215686,\n",
       "        0.99215686, 0.95686275, 0.52156863, 0.04313725, 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        ],\n",
       "       [0.        , 0.        , 0.        , 0.        , 0.53333333,\n",
       "        0.99215686, 0.99215686, 0.99215686, 0.83137255, 0.52941176,\n",
       "        0.51764706, 0.0627451 , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        ],\n",
       "       [0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        ],\n",
       "       [0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        ],\n",
       "       [0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        ]])"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x_train[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.image.AxesImage at 0x1ee5aa9d940>"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 图片预览x_train的第一张(黑白展示)\n",
    "plt.imshow(x_train[0], cmap = plt.cm.binary)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x144 with 20 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 图片预览x_train的前20张(黑白展示)\n",
    "plt.figure(figsize=(10,2))\n",
    "for i in range(20):\n",
    "    plt.subplot(2,10,i+1)   # 表示一共画2行10列，从第1个子图开始画\n",
    "    plt.xticks([])\n",
    "    plt.yticks([])\n",
    "    plt.imshow(x_train[i], cmap=plt.cm.binary)\n",
    "    plt.xlabel(str(y_train[i]))  # 显示分类数字\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##  使用CNN网络实现图片识别（1个卷积层）\n",
    "\n",
    "- 一个卷积层（20 * 3 * 3）+ 一个池化（2 * 2）\n",
    "- 全连接层用128个神经元\n",
    "- 卷积层Conv2D用法：https://keras-zh.readthedocs.io/layers/convolutional/\n",
    "<h4 style= 'color:red'>在测试集上得到的最好的结果</h4>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(60000, 28, 28)"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x_train.shape #(60000, 28, 28, 1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(60000, 28, 28, 1) (10000, 28, 28, 1)\n"
     ]
    }
   ],
   "source": [
    "# 做CNN之前，需要对数据进行整形，因为卷积层，要求输入是四维张量，[样本数量，图片长度，图片宽度，通道数]\n",
    "# 由于是黑白图片，所以我们增加一个通道数为1，其余不变，使用reshape函数即可。\n",
    "x_train_4d = x_train.reshape(x_train.shape[0],x_train.shape[1],x_train.shape[2],1)  # 整形后的4维数据 x_train_4d\n",
    "x_test_4d = x_test.reshape(x_test.shape[0],x_test.shape[1],x_test.shape[2],1)    # 整形后的4维数据  x_test_4d\n",
    "print(x_train_4d.shape, x_test_4d.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model: \"sequential_1\"\n",
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "conv2d_1 (Conv2D)            (None, 26, 26, 20)        200       \n",
      "_________________________________________________________________\n",
      "max_pooling2d_1 (MaxPooling2 (None, 13, 13, 20)        0         \n",
      "_________________________________________________________________\n",
      "flatten_1 (Flatten)          (None, 3380)              0         \n",
      "_________________________________________________________________\n",
      "dense_2 (Dense)              (None, 128)               432768    \n",
      "_________________________________________________________________\n",
      "dense_3 (Dense)              (None, 10)                1290      \n",
      "=================================================================\n",
      "Total params: 434,258\n",
      "Trainable params: 434,258\n",
      "Non-trainable params: 0\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "from tensorflow.keras.layers import Conv2D, MaxPool2D, Flatten\n",
    "\n",
    "# 构建一个CNN结构，并编译。\n",
    "\n",
    "model = Sequential()\n",
    "\n",
    "# 增加卷积层, 卷积核20个，大小3*3， 输入图片是28*28\n",
    "model.add(Conv2D(filters=20, kernel_size=(3, 3), input_shape = (28,28,1),activation = 'relu'))   \n",
    "# 池化层：最大池化：2*2\n",
    "model.add(MaxPool2D(pool_size = (2,2)))\n",
    "\n",
    "# 展开到一维\n",
    "model.add(Flatten())\n",
    "\n",
    "# 全连接层，128节点\n",
    "model.add(Dense(128, activation = 'relu'))\n",
    "\n",
    "# 输出层，10节点\n",
    "model.add(Dense(10, activation = 'softmax'))\n",
    "\n",
    "# 编译：随机梯度下降学习率0.1，损失函数分类交叉熵\n",
    "model.compile(optimizer = 'sgd',\n",
    "      loss = 'sparse_categorical_crossentropy', \n",
    "      metrics = ['accuracy'])         \n",
    "\n",
    "# 查看模型结构\n",
    "model.summary()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/10\n",
      "3000/3000 [==============================] - 16s 5ms/step - loss: 0.3868 - accuracy: 0.8912 - val_loss: 0.1934 - val_accuracy: 0.9433\n",
      "Epoch 2/10\n",
      "3000/3000 [==============================] - 16s 5ms/step - loss: 0.1768 - accuracy: 0.9467 - val_loss: 0.1276 - val_accuracy: 0.9619\n",
      "Epoch 3/10\n",
      "3000/3000 [==============================] - 15s 5ms/step - loss: 0.1284 - accuracy: 0.9619 - val_loss: 0.1026 - val_accuracy: 0.9681\n",
      "Epoch 4/10\n",
      "3000/3000 [==============================] - 16s 5ms/step - loss: 0.1028 - accuracy: 0.9693 - val_loss: 0.0889 - val_accuracy: 0.9721\n",
      "Epoch 5/10\n",
      "3000/3000 [==============================] - 16s 5ms/step - loss: 0.0865 - accuracy: 0.9742 - val_loss: 0.0810 - val_accuracy: 0.9767\n",
      "Epoch 6/10\n",
      "3000/3000 [==============================] - 16s 5ms/step - loss: 0.0743 - accuracy: 0.9772 - val_loss: 0.0812 - val_accuracy: 0.9740\n",
      "Epoch 7/10\n",
      "3000/3000 [==============================] - 15s 5ms/step - loss: 0.0645 - accuracy: 0.9811 - val_loss: 0.0687 - val_accuracy: 0.9785\n",
      "Epoch 8/10\n",
      "3000/3000 [==============================] - 15s 5ms/step - loss: 0.0580 - accuracy: 0.9823 - val_loss: 0.0672 - val_accuracy: 0.9800\n",
      "Epoch 9/10\n",
      "3000/3000 [==============================] - 15s 5ms/step - loss: 0.0521 - accuracy: 0.9840 - val_loss: 0.0704 - val_accuracy: 0.9769\n",
      "Epoch 10/10\n",
      "3000/3000 [==============================] - 15s 5ms/step - loss: 0.0472 - accuracy: 0.9859 - val_loss: 0.0598 - val_accuracy: 0.9801\n"
     ]
    }
   ],
   "source": [
    "# 训练模型：手动设置validation_data，观察loss和accuracy\n",
    "hs_cnn = model.fit(x_train_4d, y_train, \n",
    "              batch_size = 20, epochs = 10, \n",
    "              validation_data = (x_test_4d, y_test)\n",
    "             )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize = (8,4))\n",
    "plt.plot(hs_cnn.history['loss'], label = 'Train')  \n",
    "plt.plot(hs_cnn.history['val_loss'],label = 'test')  \n",
    "plt.title('Model loss')  \n",
    "plt.ylabel('Loss')  \n",
    "plt.xlabel('Epoch')  \n",
    "plt.legend(loc=0)  # loc=0 表示最优位置，自动。也可以手动设置，如：'upper left'等\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "前30个test样本的预测值为：  [7 2 1 0 4 1 4 9 6 9 0 6 9 0 1 5 9 7 3 4 9 6 6 5 4 0 7 4 0 1]\n",
      "前30个test样本的真实值为：  [7 2 1 0 4 1 4 9 5 9 0 6 9 0 1 5 9 7 3 4 9 6 6 5 4 0 7 4 0 1]\n"
     ]
    }
   ],
   "source": [
    "# 用numpy的argmax来取出最大的概率对应的index，即为分类号\n",
    "test_pred_class = np.argmax(model.predict(x_test_4d), axis = 1)\n",
    "print('前30个test样本的预测值为： ',test_pred_class[:30])\n",
    "print('前30个test样本的真实值为： ',y_test[:30])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "test上的分类报告如下：\n",
      "               precision    recall  f1-score   support\n",
      "\n",
      "           0       0.98      0.99      0.99       980\n",
      "           1       0.99      0.99      0.99      1135\n",
      "           2       0.98      0.98      0.98      1032\n",
      "           3       0.96      0.99      0.97      1010\n",
      "           4       0.96      0.99      0.98       982\n",
      "           5       0.98      0.98      0.98       892\n",
      "           6       0.99      0.98      0.98       958\n",
      "           7       0.98      0.98      0.98      1028\n",
      "           8       0.98      0.97      0.98       974\n",
      "           9       0.99      0.95      0.97      1009\n",
      "\n",
      "    accuracy                           0.98     10000\n",
      "   macro avg       0.98      0.98      0.98     10000\n",
      "weighted avg       0.98      0.98      0.98     10000\n",
      "\n",
      "train上的分类报告如下：\n",
      "               precision    recall  f1-score   support\n",
      "\n",
      "           0       0.99      0.99      0.99      5923\n",
      "           1       0.99      1.00      0.99      6742\n",
      "           2       0.99      0.99      0.99      5958\n",
      "           3       0.98      0.99      0.99      6131\n",
      "           4       0.97      1.00      0.99      5842\n",
      "           5       0.99      0.99      0.99      5421\n",
      "           6       0.99      0.99      0.99      5918\n",
      "           7       0.99      0.99      0.99      6265\n",
      "           8       0.99      0.98      0.99      5851\n",
      "           9       1.00      0.96      0.98      5949\n",
      "\n",
      "    accuracy                           0.99     60000\n",
      "   macro avg       0.99      0.99      0.99     60000\n",
      "weighted avg       0.99      0.99      0.99     60000\n",
      "\n"
     ]
    }
   ],
   "source": [
    "from sklearn.metrics import classification_report\n",
    "\n",
    "test_pred_class = np.argmax(model.predict(x_test_4d), axis = 1)\n",
    "print(\"test上的分类报告如下：\\n\",classification_report(y_test, test_pred_class))\n",
    "\n",
    "train_pred_class = np.argmax(model.predict(x_train_4d), axis = 1)\n",
    "print(\"train上的分类报告如下：\\n\",classification_report(y_train, train_pred_class))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.3"
  },
  "varInspector": {
   "cols": {
    "lenName": 16,
    "lenType": 16,
    "lenVar": 40
   },
   "kernels_config": {
    "python": {
     "delete_cmd_postfix": "",
     "delete_cmd_prefix": "del ",
     "library": "var_list.py",
     "varRefreshCmd": "print(var_dic_list())"
    },
    "r": {
     "delete_cmd_postfix": ") ",
     "delete_cmd_prefix": "rm(",
     "library": "var_list.r",
     "varRefreshCmd": "cat(var_dic_list()) "
    }
   },
   "types_to_exclude": [
    "module",
    "function",
    "builtin_function_or_method",
    "instance",
    "_Feature"
   ],
   "window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
